package com.zan.seckillservice.config;

import com.zan.seckillservice.domain.Goods;
import com.zan.seckillservice.mapper.GoodsMapper;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.List;

/**
 * @Author Zan
 * @Create 2024/9/2 19:05
 * @ClassName: DataSyncConfig
 * @Description : 数据同步
 * 1. 每天10点 / 晚上8点 通过定时任务，将mysql的库存同步到redis中去
 * 2. 为了测试方便，希望项目启动的时候，就同步数据
 */
@Component
public class DataSyncConfig {

    @Resource
    private GoodsMapper goodsMapper;

    @Autowired
    private StringRedisTemplate redisTemplate;

    // 秒 分 时
//    @Scheduled(cron = "0 0 10 0 0 ?")
//    public void initData() {
//
//    }

    /**
     * 希望这个方法在项目程序启动以后
     * 并且在这个类的属性注入完以后执行
     * Bean的生命周期：
     * （1）实例化
     * （2）属性赋值
     * （3）初始化：（前/中/后）自定义的一个initMethod方法，前：@PostConstruct，中：InitializingBean，后：BeanPostProcessor
     * （4）使用
     * （5）销毁
     */
    @PostConstruct
    public void initData() {
        List<Goods> goodsList = goodsMapper.selectSeckillGoods();
        if (CollectionUtils.isEmpty(goodsList)) {
            return;
        }
        // 有库存，存入redis
        goodsList.forEach(goods -> {
            redisTemplate.opsForValue().set("goodsId:" + goods.getId(), goods.getStocks().toString());
        });
    }

}
